home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / tests / macro.dia.ref < prev    next >
Text File  |  1999-09-16  |  18KB  |  1,255 lines

  1.  
  2. // simple
  3.  
  4. //
  5.  
  6. deff('[x,y]=t1(a,b)','x=a+b,y=a-b')
  7.  
  8. [u,v]=t1(1,2);
  9.  
  10. if u<> 3 then bugmes();quit;end
  11.  
  12. if v<>-1 then bugmes();quit;end
  13.  
  14. //
  15.  
  16. //with arguments
  17.  
  18. b=2;
  19.  
  20. if t1(1)<>t1(1,2) then bugmes();quit;end
  21.  
  22. t2=t1;
  23.  
  24. //
  25.  
  26. //compile
  27.  
  28. comp(t1)
  29.  
  30. [u,v]=t1(1,2);
  31.  
  32. if u<> 3 then bugmes();quit;end
  33.  
  34. if v<>-1 then bugmes();quit;end
  35.  
  36. b=2;
  37.  
  38. if t1(1)<>t1(1,2) then bugmes();quit;end
  39.  
  40. //
  41.  
  42. //resume
  43.  
  44. //
  45.  
  46. deff('[x,y]=t3(a,b)','x=a+b,y=a-b,z=resume(a*a)')
  47.  
  48. [u,v]=t3(1,2);
  49.  
  50. if u<> 3 then bugmes();quit;end
  51.  
  52. if v<>-1 then bugmes();quit;end
  53.  
  54. if z<>1 then bugmes();quit;end
  55.  
  56. b=2;
  57.  
  58. clear z
  59.  
  60. if t3(1)<>t3(1,2) then bugmes();quit;end
  61.  
  62. if z<>1 then bugmes();quit;end
  63.  
  64. t4=t3;
  65.  
  66. //compiled
  67.  
  68. comp(t3)
  69.  
  70. [u,v]=t3(1,2);
  71.  
  72. if u<> 3 then bugmes();quit;end
  73.  
  74. if v<>-1 then bugmes();quit;end
  75.  
  76. if z<>1 then bugmes();quit;end
  77.  
  78. clear z
  79.  
  80. b=2;
  81.  
  82. if t3(1)<>t3(1,2) then bugmes();quit;end
  83.  
  84. if z<>1 then bugmes();quit;end
  85.  
  86. //
  87.  
  88. // macro + clauses
  89.  
  90. //
  91.  
  92. text = ['if n>0 then x=1'
  93.                                 'y=0;for k=1:n,y=y+k,end'
  94.                             'else x=-1'
  95.                                  'if n=4 then y=''yes'' '
  96.                                          'else y=''no'' '
  97.                                  'end'
  98.                     'end'
  99.                    'if n=-1 then return,end'
  100.                    'if n=-2 then tt=resume(n),end'
  101.                     'select x,'
  102.                     'case 1 then x=''pos'' ,tt=resume(''ok''),'
  103.                     'case -1 then x=''neg'' ,'
  104.                     'end'];
  105.  
  106. //
  107.  
  108. deff('[x,y]=t5(n)',text)
  109.  
  110. [u,v]=t5(5);
  111.  
  112. if u<>'pos' then bugmes();quit;end
  113.  
  114. if v<>15 then bugmes();quit;end
  115.  
  116. if tt<>'ok' then bugmes();quit;end
  117.  
  118. clear tt
  119.  
  120. [u,v]=t5(-1);
  121.  
  122. if u<>-1 then bugmes();quit;end
  123.  
  124. if v<>'no' then bugmes();quit;end
  125.  
  126. if exists('tt')=1 then bugmes();quit;end
  127.  
  128. clear tt v
  129.  
  130. u=t5(-2);
  131.  
  132. if u<>-1 then bugmes();quit;end
  133.  
  134. if tt<>-2 then bugmes();quit;end
  135.  
  136. clear tt
  137.  
  138. u=t5(-4);
  139.  
  140. if u<>'neg' then bugmes();quit;end
  141.  
  142. if exists('tt')=1 then bugmes();quit;end
  143.  
  144. // en compile maintenant
  145.  
  146. clear u v tt
  147.  
  148. comp(t5)
  149.  
  150. [u,v]=t5(5);
  151.  
  152. if u<>'pos' then bugmes();quit;end
  153.  
  154. if v<>15 then bugmes();quit;end
  155.  
  156. if tt<>'ok' then bugmes();quit;end
  157.  
  158. clear tt
  159.  
  160. [u,v]=t5(-1);
  161.  
  162. if u<>-1 then bugmes();quit;end
  163.  
  164. if v<>'no' then bugmes();quit;end
  165.  
  166. if exists('tt')=1 then bugmes();quit;end
  167.  
  168. clear tt v
  169.  
  170. u=t5(-2);
  171.  
  172. if u<>-1 then bugmes();quit;end
  173.  
  174. if tt<>-2 then bugmes();quit;end
  175.  
  176. clear tt
  177.  
  178. u=t5(-4);
  179.  
  180. if u<>'neg' then bugmes();quit;end
  181.  
  182. if exists('tt')=1 then bugmes();quit;end
  183.  
  184. //
  185.  
  186. // complex clauses
  187.  
  188. //
  189.  
  190. text = ['if n>0 then x=1'
  191.                                 'y=0;for k=1:b(n),y=y+b(k),end'
  192.                             'else x=-1'
  193.                                  'if n=4 then y=b(''yes'') '
  194.                                          'else y=b(''no'') '
  195.                                  'end'
  196.                     'end'
  197.                    'if n=b(-1) then return,end'
  198.                    'if n=b(-2) then tt=resume(b(n)),end'
  199.                     'select x,'
  200.                     'case 1 then x=b(''pos'') ,tt=resume(b(''ok'')),'
  201.                     'case b(-1) then x=b(''neg'') ,'
  202.                     'end'];
  203.  
  204. deff('[x]=b(a)','x=a,prod([1 1])')
  205.  
  206. deff('[x,y]=t5(n)',text)
  207. Warning :redefining function: t5                      
  208.  
  209.  
  210. [u,v]=t5(5);
  211.  
  212. if u<>'pos' then bugmes();quit;end
  213.  
  214. if v<>15 then bugmes();quit;end
  215.  
  216. if tt<>'ok' then bugmes();quit;end
  217.  
  218. clear tt
  219.  
  220. [u,v]=t5(-1);
  221.  
  222. if u<>-1 then bugmes();quit;end
  223.  
  224. if v<>'no' then bugmes();quit;end
  225.  
  226. if exists('tt')=1 then bugmes();quit;end
  227.  
  228. clear tt v
  229.  
  230. u=t5(-2);
  231.  
  232. if u<>-1 then bugmes();quit;end
  233.  
  234. if tt<>-2 then bugmes();quit;end
  235.  
  236. clear tt
  237.  
  238. u=t5(-4);
  239.  
  240. if u<>'neg' then bugmes();quit;end
  241.  
  242. if exists('tt')=1 then bugmes();quit;end
  243.  
  244. // en compile maintenant
  245.  
  246. clear u v tt
  247.  
  248. comp(t5)
  249.  
  250. [u,v]=t5(5);
  251.  
  252. if u<>'pos' then bugmes();quit;end
  253.  
  254. if v<>15 then bugmes();quit;end
  255.  
  256. if tt<>'ok' then bugmes();quit;end
  257.  
  258. clear tt
  259.  
  260. [u,v]=t5(-1);
  261.  
  262. if u<>-1 then bugmes();quit;end
  263.  
  264. if v<>'no' then bugmes();quit;end
  265.  
  266. if exists('tt')=1 then bugmes();quit;end
  267.  
  268. clear tt v
  269.  
  270. u=t5(-2);
  271.  
  272. if u<>-1 then bugmes();quit;end
  273.  
  274. if tt<>-2 then bugmes();quit;end
  275.  
  276. clear tt
  277.  
  278. u=t5(-4);
  279.  
  280. if u<>'neg' then bugmes();quit;end
  281.  
  282. if exists('tt')=1 then bugmes();quit;end
  283.  
  284. //compiled b
  285.  
  286. comp(b)
  287.  
  288. deff('[x,y]=t5(n)',text)
  289. Warning :redefining function: t5                      
  290.  
  291.  
  292. [u,v]=t5(5);
  293.  
  294. if u<>'pos' then bugmes();quit;end
  295.  
  296. if v<>15 then bugmes();quit;end
  297.  
  298. if tt<>'ok' then bugmes();quit;end
  299.  
  300. clear tt
  301.  
  302. [u,v]=t5(-1);
  303.  
  304. if u<>-1 then bugmes();quit;end
  305.  
  306. if v<>'no' then bugmes();quit;end
  307.  
  308. if exists('tt')=1 then bugmes();quit;end
  309.  
  310. clear tt v
  311.  
  312. u=t5(-2);
  313.  
  314. if u<>-1 then bugmes();quit;end
  315.  
  316. if tt<>-2 then bugmes();quit;end
  317.  
  318. clear tt
  319.  
  320. u=t5(-4);
  321.  
  322. if u<>'neg' then bugmes();quit;end
  323.  
  324. if exists('tt')=1 then bugmes();quit;end
  325.  
  326. //
  327.  
  328. clear u v tt
  329.  
  330. comp(t5)
  331.  
  332. [u,v]=t5(5);
  333.  
  334. if u<>'pos' then bugmes();quit;end
  335.  
  336. if v<>15 then bugmes();quit;end
  337.  
  338. if tt<>'ok' then bugmes();quit;end
  339.  
  340. clear tt
  341.  
  342. [u,v]=t5(-1);
  343.  
  344. if u<>-1 then bugmes();quit;end
  345.  
  346. if v<>'no' then bugmes();quit;end
  347.  
  348. if exists('tt')=1 then bugmes();quit;end
  349.  
  350. clear tt v
  351.  
  352. u=t5(-2);
  353.  
  354. if u<>-1 then bugmes();quit;end
  355.  
  356. if tt<>-2 then bugmes();quit;end
  357.  
  358. clear tt
  359.  
  360. u=t5(-4);
  361.  
  362. if u<>'neg' then bugmes();quit;end
  363.  
  364. if exists('tt')=1 then bugmes();quit;end
  365.  
  366. //more complex
  367.  
  368. deff('[x]=b(a)','if a=1 then x=1,else x=a,prod([1 1]),end')
  369. Warning :redefining function: b                       
  370.  
  371.  
  372. //
  373.  
  374. deff('[x,y]=t5(n)',text)
  375. Warning :redefining function: t5                      
  376.  
  377.  
  378. [u,v]=t5(5);
  379.  
  380. if u<>'pos' then bugmes();quit;end
  381.  
  382. if v<>15 then bugmes();quit;end
  383.  
  384. if tt<>'ok' then bugmes();quit;end
  385.  
  386. clear tt
  387.  
  388. [u,v]=t5(-1);
  389.  
  390. if u<>-1 then bugmes();quit;end
  391.  
  392. if v<>'no' then bugmes();quit;end
  393.  
  394. if exists('tt')=1 then bugmes();quit;end
  395.  
  396. clear tt v
  397.  
  398. u=t5(-2);
  399.  
  400. if u<>-1 then bugmes();quit;end
  401.  
  402. if tt<>-2 then bugmes();quit;end
  403.  
  404. clear tt
  405.  
  406. u=t5(-4);
  407.  
  408. if u<>'neg' then bugmes();quit;end
  409.  
  410. if exists('tt')=1 then bugmes();quit;end
  411.  
  412. //compile
  413.  
  414. clear u v tt
  415.  
  416. comp(t5)
  417.  
  418. [u,v]=t5(5);
  419.  
  420. if u<>'pos' then bugmes();quit;end
  421.  
  422. if v<>15 then bugmes();quit;end
  423.  
  424. if tt<>'ok' then bugmes();quit;end
  425.  
  426. clear tt
  427.  
  428. [u,v]=t5(-1);
  429.  
  430. if u<>-1 then bugmes();quit;end
  431.  
  432. if v<>'no' then bugmes();quit;end
  433.  
  434. if exists('tt')=1 then bugmes();quit;end
  435.  
  436. clear tt v
  437.  
  438. u=t5(-2);
  439.  
  440. if u<>-1 then bugmes();quit;end
  441.  
  442. if tt<>-2 then bugmes();quit;end
  443.  
  444. clear tt
  445.  
  446. u=t5(-4);
  447.  
  448. if u<>'neg' then bugmes();quit;end
  449.  
  450. if exists('tt')=1 then bugmes();quit;end
  451.  
  452. //
  453.  
  454. comp(b)
  455.  
  456. deff('[x,y]=t5(n)',text)
  457. Warning :redefining function: t5                      
  458.  
  459.  
  460. [u,v]=t5(5);
  461.  
  462. if u<>'pos' then bugmes();quit;end
  463.  
  464. if v<>15 then bugmes();quit;end
  465.  
  466. if tt<>'ok' then bugmes();quit;end
  467.  
  468. clear tt
  469.  
  470. [u,v]=t5(-1);
  471.  
  472. if u<>-1 then bugmes();quit;end
  473.  
  474. if v<>'no' then bugmes();quit;end
  475.  
  476. if exists('tt')=1 then bugmes();quit;end
  477.  
  478. clear tt v
  479.  
  480. u=t5(-2);
  481.  
  482. if u<>-1 then bugmes();quit;end
  483.  
  484. if tt<>-2 then bugmes();quit;end
  485.  
  486. clear tt
  487.  
  488. u=t5(-4);
  489.  
  490. if u<>'neg' then bugmes();quit;end
  491.  
  492. if exists('tt')=1 then bugmes();quit;end
  493.  
  494. //
  495.  
  496. clear u v tt
  497.  
  498. comp(t5)
  499.  
  500. [u,v]=t5(5);
  501.  
  502. if u<>'pos' then bugmes();quit;end
  503.  
  504. if v<>15 then bugmes();quit;end
  505.  
  506. if tt<>'ok' then bugmes();quit;end
  507.  
  508. clear tt
  509.  
  510. [u,v]=t5(-1);
  511.  
  512. if u<>-1 then bugmes();quit;end
  513.  
  514. if v<>'no' then bugmes();quit;end
  515.  
  516. if exists('tt')=1 then bugmes();quit;end
  517.  
  518. clear tt v
  519.  
  520. u=t5(-2);
  521.  
  522. if u<>-1 then bugmes();quit;end
  523.  
  524. if tt<>-2 then bugmes();quit;end
  525.  
  526. clear tt
  527.  
  528. u=t5(-4);
  529.  
  530. if u<>'neg' then bugmes();quit;end
  531.  
  532. if exists('tt')=1 then bugmes();quit;end
  533.  
  534. // resume
  535.  
  536. deff('[]=t6(a)','x=resume(a)')
  537.  
  538. clear ans x
  539.  
  540. t6(15)
  541.  
  542. if x<>15 then bugmes();quit;end
  543.  
  544. if exists('ans')=1 then bugmes();quit;end
  545.  
  546. //
  547.  
  548. comp(t6)
  549.  
  550. clear ans x
  551.  
  552. t6(15)
  553.  
  554. if x<>15 then bugmes();quit;end
  555.  
  556. if exists('ans')=1 then bugmes();quit;end
  557.  
  558. //
  559.  
  560. //
  561.  
  562. //
  563.  
  564. deff('[ydot]=simul(t,y,a)','ydot=a')
  565.  
  566. a=2;
  567.  
  568. //appel le plus imple
  569.  
  570. y=ode(0,0,1:2,simul)
  571.  y  =
  572.  
  573. !   2.    4. !
  574.  
  575. if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
  576.  
  577. //idem en compile
  578.  
  579. comp(simul)
  580.  
  581. y=ode(0,0,1:2,simul)
  582.  y  =
  583.  
  584. !   2.    4. !
  585.  
  586. if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
  587.  
  588. //appel avec passage d'arguments supplementaires
  589.  
  590. deff('[ydot]=simul(t,y,a)','ydot=a')
  591. Warning :redefining function: simul                   
  592.  
  593.  
  594. y=ode(0,0,1:2,list(simul,a))
  595.  y  =
  596.  
  597. !   2.    4. !
  598.  
  599. if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
  600.  
  601. //idem en compile
  602.  
  603. comp(simul)
  604.  
  605. y=ode(0,0,1:2,list(simul,a))
  606.  y  =
  607.  
  608. !   2.    4. !
  609.  
  610. if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
  611.  
  612. //
  613.  
  614. //non linear
  615.  
  616. //
  617.  
  618. text=['for k=1:n,'
  619.      'y=ode(a*(k-1),k-1,k,simul),'
  620.      'x=[x,y],'
  621.      'end'];
  622.  
  623. //
  624.  
  625. deff('[x]=calcul(n)',text)
  626.  
  627. deff('[ydot]=simul(t,y,a)','ydot=a')
  628. Warning :redefining function: simul                   
  629.  
  630.  
  631. x=[];
  632.  
  633. x=calcul(3);
  634.  
  635. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  636.  
  637. comp(simul)
  638.  
  639. x=[];
  640.  
  641. x=calcul(3);
  642.  
  643. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  644.  
  645. comp(calcul)
  646.  
  647. x=[];
  648.  
  649. x=calcul(3);
  650.  
  651. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  652.  
  653. deff('[ydot]=simul(t,y,a)','ydot=a')
  654. Warning :redefining function: simul                   
  655.  
  656.  
  657. x=[];
  658.  
  659. x=calcul(3);
  660.  
  661. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  662.  
  663. //
  664.  
  665. text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
  666.  
  667. deff('[x]=calcul(n)',text)
  668. Warning :redefining function: calcul                  
  669.  
  670.  
  671. deff('[ydot]=simul(t,y,a)','ydot=a')
  672.  
  673. x=[];
  674.  
  675. x=calcul(3);
  676.  
  677. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  678.  
  679. comp(simul)
  680.  
  681. x=[];
  682.  
  683. x=calcul(3);
  684.  
  685. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  686.  
  687. comp(calcul)
  688.  
  689. x=[];
  690.  
  691. x=calcul(3);
  692.  
  693. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  694.  
  695. deff('[ydot]=simul(t,y,a)','ydot=a')
  696. Warning :redefining function: simul                   
  697.  
  698.  
  699. x=[];
  700.  
  701. x=calcul(3);
  702.  
  703. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  704.  
  705. //resume in external
  706.  
  707. deff('[ydot]=simul(t,y,a)','ydot=a,tt=resume([tt,t])')
  708. Warning :redefining function: simul                   
  709.  
  710.  
  711. tt=[]
  712.  tt  =
  713.  
  714.      []
  715.  
  716. deff('[x]=calcul(n)',text)
  717. Warning :redefining function: calcul                  
  718.  
  719.  
  720. deff('[ydot]=simul(t,y,a)','ydot=a')
  721. Warning :redefining function: simul                   
  722.  
  723.  
  724. x=[];
  725.  
  726. x=calcul(3);
  727.  
  728. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  729.  
  730. comp(simul)
  731.  
  732. x=[];
  733.  
  734. x=calcul(3);
  735.  
  736. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  737.  
  738. comp(calcul)
  739.  
  740. x=[];
  741.  
  742. x=calcul(3);
  743.  
  744. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  745.  
  746. deff('[ydot]=simul(t,y,a)','ydot=a')
  747. Warning :redefining function: simul                   
  748.  
  749.  
  750. x=[];
  751.  
  752. x=calcul(3);
  753.  
  754. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  755.  
  756. //
  757.  
  758. //external calls a macro
  759.  
  760. //
  761.  
  762. deff('[x]=b(a)','if a=1 then x=a,prod([1 1]),else x=a,prod([1 1]),end')
  763. Warning :redefining function: b                       
  764.  
  765.  
  766. text=['for k=1:n,'
  767.      'y=ode(a*(k-1),k-1,k,simul),'
  768.      'x=[x,y],'
  769.      'end'];
  770.  
  771. //
  772.  
  773. deff('[x]=calcul(n)',text)
  774. Warning :redefining function: calcul                  
  775.  
  776.  
  777. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  778. Warning :redefining function: simul                   
  779.  
  780.  
  781. x=[];
  782.  
  783. x=calcul(3);
  784.  
  785. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  786.  
  787. comp(simul)
  788.  
  789. x=[];
  790.  
  791. x=calcul(3);
  792.  
  793. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  794.  
  795. comp(calcul)
  796.  
  797. x=[];
  798.  
  799. x=calcul(3);
  800.  
  801. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  802.  
  803. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  804. Warning :redefining function: simul                   
  805.  
  806.  
  807. x=[];
  808.  
  809. x=calcul(3);
  810.  
  811. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  812.  
  813. //
  814.  
  815. text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
  816.  
  817. deff('[x]=calcul(n)',text)
  818. Warning :redefining function: calcul                  
  819.  
  820.  
  821. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  822.  
  823. x=[];
  824.  
  825. x=calcul(3);
  826.  
  827. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  828.  
  829. comp(simul)
  830.  
  831. x=[];
  832.  
  833. x=calcul(3);
  834.  
  835. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  836.  
  837. comp(calcul)
  838.  
  839. x=[];
  840.  
  841. x=calcul(3);
  842.  
  843. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  844.  
  845. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  846. Warning :redefining function: simul                   
  847.  
  848.  
  849. x=[];
  850.  
  851. x=calcul(3);
  852.  
  853. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  854.  
  855. //
  856.  
  857. deff('[ydot]=simul(t,y,a)','ydot=b(a),tt=resume([tt,t])')
  858. Warning :redefining function: simul                   
  859.  
  860.  
  861. tt=[]
  862.  tt  =
  863.  
  864.      []
  865.  
  866. deff('[x]=calcul(n)',text)
  867. Warning :redefining function: calcul                  
  868.  
  869.  
  870. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  871. Warning :redefining function: simul                   
  872.  
  873.  
  874. x=[];
  875.  
  876. x=calcul(3);
  877.  
  878. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  879.  
  880. comp(simul)
  881.  
  882. x=[];
  883.  
  884. x=calcul(3);
  885.  
  886. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  887.  
  888. comp(calcul)
  889.  
  890. x=[];
  891.  
  892. x=calcul(3);
  893.  
  894. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  895.  
  896. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  897. Warning :redefining function: simul                   
  898.  
  899.  
  900. x=[];
  901.  
  902. x=calcul(3);
  903.  
  904. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  905.  
  906. comp(b)
  907.  
  908. text=['for k=1:n,'
  909.      'y=ode(a*(k-1),k-1,k,simul),'
  910.      'x=[x,y],'
  911.      'end'];
  912.  
  913. //
  914.  
  915. deff('[x]=calcul(n)',text)
  916. Warning :redefining function: calcul                  
  917.  
  918.  
  919. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  920.  
  921. x=[];
  922.  
  923. x=calcul(3);
  924.  
  925. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  926.  
  927. comp(simul)
  928.  
  929. x=[];
  930.  
  931. x=calcul(3);
  932.  
  933. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  934.  
  935. comp(calcul)
  936.  
  937. x=[];
  938.  
  939. x=calcul(3);
  940.  
  941. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  942.  
  943. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  944. Warning :redefining function: simul                   
  945.  
  946.  
  947. x=[];
  948.  
  949. x=calcul(3);
  950.  
  951. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  952.  
  953. //
  954.  
  955. text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
  956.  
  957. deff('[x]=calcul(n)',text)
  958. Warning :redefining function: calcul                  
  959.  
  960.  
  961. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  962.  
  963. x=[];
  964.  
  965. x=calcul(3);
  966.  
  967. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  968.  
  969. comp(simul)
  970.  
  971. x=[];
  972.  
  973. x=calcul(3);
  974.  
  975. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  976.  
  977. comp(calcul)
  978.  
  979. x=[];
  980.  
  981. x=calcul(3);
  982.  
  983. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  984.  
  985. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  986. Warning :redefining function: simul                   
  987.  
  988.  
  989. x=[];
  990.  
  991. x=calcul(3);
  992.  
  993. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  994.  
  995. //
  996.  
  997. deff('[ydot]=simul(t,y,a)','ydot=b(a),tt=resume([tt,t])')
  998. Warning :redefining function: simul                   
  999.  
  1000.  
  1001. tt=[]
  1002.  tt  =
  1003.  
  1004.      []
  1005.  
  1006. deff('[x]=calcul(n)',text)
  1007. Warning :redefining function: calcul                  
  1008.  
  1009.  
  1010. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  1011. Warning :redefining function: simul                   
  1012.  
  1013.  
  1014. x=[];
  1015.  
  1016. x=calcul(3);
  1017.  
  1018. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  1019.  
  1020. comp(simul)
  1021.  
  1022. x=[];
  1023.  
  1024. x=calcul(3);
  1025.  
  1026. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  1027.  
  1028. comp(calcul)
  1029.  
  1030. x=[];
  1031.  
  1032. x=calcul(3);
  1033.  
  1034. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  1035.  
  1036. deff('[ydot]=simul(t,y,a)','ydot=b(a)')
  1037. Warning :redefining function: simul                   
  1038.  
  1039.  
  1040. x=[];
  1041.  
  1042. x=calcul(3);
  1043.  
  1044. if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
  1045.  
  1046. //
  1047.  
  1048. //macro defining ,compiling and executing a macro
  1049.  
  1050. //
  1051.  
  1052. text=['deff(''[x]=b(a)'',''if a=1 then x=1,else x=a,prod([1 1]),end''),'
  1053.       'comp(b),'
  1054.       'x=b(n),']
  1055.  text  =
  1056.  
  1057. !deff('[x]=b(a)','if a=1 then x=1,else x=a,prod([1 1]),end'),  !
  1058. !                                                              !
  1059. !comp(b),                                                      !
  1060. !                                                              !
  1061. !x=b(n),                                                       !
  1062.  
  1063. deff('[x]=t8(n)',text')
  1064.  
  1065. y=t8(10);
  1066.  
  1067. if y<>10 then bugmes();quit;end
  1068.  
  1069. comp(t8)
  1070.  
  1071. y=t8(10);
  1072.  
  1073. if y<>10 then bugmes();quit;end
  1074.  
  1075. //
  1076.  
  1077. //
  1078.  
  1079. s=poly(0,'s');z=poly(0,'z');
  1080.  
  1081. deff('[ok]=cplist(l1,l2)',['ok=1;'
  1082.                  'if size(l1)<>size(l2) then ok=0,return,end'
  1083.                  'for k=1:size(l1),'
  1084.                     'if l1(k)<>l2(k) then ok=0,return,end;'
  1085.                  'end'])
  1086.  
  1087. deff('[r]=horner(p,x)',['if type(p)==15|type(p)==16 then';
  1088.                            'r=horner(p(2),x)./horner(p(3),x),';
  1089.                            'return,';
  1090.                         'end;';
  1091.                         'd=maxi(degree(p));';
  1092.                         'r=coeff(p,d);';
  1093.                         'for k=1:d,';
  1094.                           'r=r*x+coeff(p,d-k)*eye;';
  1095.                         'end;'])
  1096. Warning :redefining function: horner                  
  1097.  
  1098.  
  1099. deff('[f]=%prp(p1,p2)',['[l,c]=size(p2);';
  1100.                         'if l*c <>1 then f=p1*invr(p2),return,end;';
  1101.                         '[l,c]=size(p1);';
  1102.                         '[p1 p2]=simp(p1,p2*ones(l,c));';
  1103.                         'f=tlist(''r'',p1,p2,[]);'])
  1104. Warning :redefining function: %prp                    
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110. horn=horner;
  1111.  
  1112. h=1/s;
  1113.  
  1114. if cplist(h,tlist('r',1,s,[]))=0 then bugmes();quit;end
  1115.  
  1116. h1=(z-1)/(z+1);
  1117.  
  1118. hrn=horner(h,h1);
  1119.  
  1120. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
  1121.  
  1122. //
  1123.  
  1124. comp(horner)
  1125.  
  1126. hrn=horner(h,h1);
  1127.  
  1128. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
  1129.  
  1130. //
  1131.  
  1132. comp(%prp);
  1133.  
  1134. h=1/s;
  1135.  
  1136. if cplist(h,tlist('r',1,s,[]))=0 then bugmes();quit;end
  1137.  
  1138. h1=(z-1)/(z+1);
  1139.  
  1140. hrn=horn(h,h1);
  1141.  
  1142. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
  1143.  
  1144. //
  1145.  
  1146. comp(horn)
  1147.  
  1148. hrn=horn(h,h1);
  1149.  
  1150. if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
  1151.  
  1152. //
  1153.  
  1154. //
  1155.  
  1156. //
  1157.  
  1158. text=['aa=1,if a=2 then aa=b(a),end']
  1159.  text  =
  1160.  
  1161.  aa=1,if a=2 then aa=b(a),end   
  1162.  
  1163. fic=file('open','test_macro_exec','unknown')
  1164.  fic  =
  1165.  
  1166.     3.  
  1167.  
  1168. write(fic,text)
  1169.  
  1170. file('close',fic)
  1171.  
  1172. deff('[x]=b(a)','x=a,prod([1 1])')
  1173. Warning :redefining function: b                       
  1174.  
  1175.  
  1176.  
  1177. y=t9(2)
  1178.  
  1179.  aa=1,if a=2 then aa=b(a),end
  1180.  aa  =
  1181.  
  1182.     1.  
  1183.  aa  =
  1184.  
  1185.     2.  
  1186.  
  1187.  y  =
  1188.  
  1189.     2.  
  1190.  
  1191. if y<>2 then bugmes();quit;end
  1192.  
  1193. file('rewind',fic)
  1194.  
  1195. comp(t9)
  1196.  
  1197. y=t9(2)
  1198.  
  1199.  aa=1,if a=2 then aa=b(a),end
  1200.  aa  =
  1201.  
  1202.     1.  
  1203.  aa  =
  1204.  
  1205.     2.  
  1206.  
  1207.  y  =
  1208.  
  1209.     2.  
  1210.  
  1211. if y<>2 then bugmes();quit;end
  1212.  
  1213. //
  1214.  
  1215. comp(b)
  1216.  
  1217. Warning :redefining function: t9                      
  1218.  
  1219.  
  1220. y=t9(2)
  1221.  
  1222.  aa=1,if a=2 then aa=b(a),end
  1223.  aa  =
  1224.  
  1225.     1.  
  1226.  aa  =
  1227.  
  1228.     2.  
  1229.  
  1230.  y  =
  1231.  
  1232.     2.  
  1233.  
  1234. if y<>2 then bugmes();quit;end
  1235.  
  1236. comp(t9)
  1237.  
  1238. y=t9(2)
  1239.  
  1240.  aa=1,if a=2 then aa=b(a),end
  1241.  aa  =
  1242.  
  1243.     1.  
  1244.  aa  =
  1245.  
  1246.     2.  
  1247.  
  1248.  y  =
  1249.  
  1250.     2.  
  1251.  
  1252. if y<>2 then bugmes();quit;end
  1253.  
  1254.  
  1255.